/***************************************************************************
 *   Copyright (C) 2008 by Marco Gulino   *
 *   marco.gulino@gmail.com   *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   51 Franklin Street, Fifth Floor Boston, MA 02110-1301, USA            *
 ***************************************************************************/

#ifndef QFILEINFO_INTERFACE_H
#define QFILEINFO_INTERFACE_H
#include <QMultiHash>
#include <QFileInfo>
#include <QSharedPointer>
class QDirInterface;
class QFileInfoInterface {
    public:
        QFileInfoInterface(const QFileInfo &fileInfo);
        virtual ~QFileInfoInterface();
        bool operator==(const QFileInfoInterface &other) const;
        bool operator!=(const QFileInfoInterface &other) const;
        QFileInfo getFileInfo();
        virtual bool isFile() const;
        virtual bool isDir() const;
        virtual QString filePath() const;
        virtual QDirInterface *dir();
        void setChecksum(const QByteArray& theValue) { m_checksum = theValue; }
        inline QByteArray checksum() const { return m_checksum; }
        virtual inline qint64 size() const { return f_fileInfo.size(); }
    private:
        QFileInfo f_fileInfo;
        QByteArray m_checksum;
};
typedef QSharedPointer<QFileInfoInterface> QFileInfoInterfaceSharedPointer;

typedef QMultiHash<long, QFileInfoInterfaceSharedPointer> QFileInfoInterfaceHash;
typedef QMultiHash<QByteArray, QFileInfoInterfaceSharedPointer> QFileInfoChecksummedHash;
typedef QMultiHash<long, QFileInfoInterfaceSharedPointer>::iterator QFileInfoInterfaceHashIterator;
#endif
